Spis treści

  1. Wczytywanie danych
  2. Przetwarzanie danych
  3. Korelacja
    1. Korelacja wybranych parametrów
    2. Macierz korelacji

Ładowanie bibliotek

library(dplyr)
library(ggplot2) 
library('corrplot')
library(caret)
library(plotly)

Wczytywanie danych z pliku

all_data <- read.csv(file="elektrownie.csv", header=TRUE, sep=",")

Kod przetwarzający dane

Zmiana nazw kolumn

needed_data <- all_data %>% select(-icon)
colnames(needed_data) <- c("measurementId", "place", "model", "brand", "latitude","longitude", "age", "year", "day", "hour", "date", "temperature", "radiation", "pressure", "windspeed", "humidity", "dewpoint", "bearing", "cloudcover", "temp_param", "radiation_param", "pressure_param", "wind_param", "humidity_param", "dewpoint_param","bearing_param", "cloud_param", "distance", "altitude", "azimuth", "altitude_param", "azimuth_param","pcnm1", "pcnm2", "pcnm3", "pcnm4", "pcnm5", "pcnm6", "pcnm7", "pcnm8", "pcnm9", "pcnm10", "pcnm11", "pcnm12", "pcnm13", "pcnm14", "pcnm15", "mode", "mode_param","energy")
needed_data$only_day <- as.numeric(format(as.POSIXct(factor(needed_data$date),format="%m/%d/%Y %H:%M"),"%d"))
needed_data$only_month <- as.numeric(format(as.POSIXct(factor(needed_data$date),format="%m/%d/%Y %H:%M"),"%m"))
needed_data$only_hour <- as.numeric(format(as.POSIXct(factor(needed_data$date),format="%m/%d/%Y %H:%M"),"%H"))
needed_data$place_string <- paste("place: ", as.character(needed_data$place))
needed_data$date_posix <- as.POSIXct(as.character(needed_data$date), format="%m/%d/%Y %H:%M")

Uzupełnienie zerowych wartości

Wyodrębnienie modeli, marek oraz umiejscowienia czujników

W zbiorze występują dane dla 17 różnych lokalizacji.

idbrands_with_models <- unique(needed_data[c("brand", "model")])
idmodels <- unique(needed_data$model)
idbrands <- unique(needed_data$brand)
idplaces <- unique(needed_data$place)
gps <- unique(needed_data[c("latitude", "longitude")])
gps_with_places_id <- unique(needed_data[c("latitude", "longitude", "place")])

Analiza uzupełnienia wartości

Przed dokonaniem wyliczenia wartości pustych warto zauważyć, że w zbiorze występuje 78521 wierszy, które posiadają wyprodukowaną energię na poziomie 0, 78489 wierszy, które posiadają zmierzony poziom nasłonecznienia na poziomie 0 oraz 72864 wierszy, które posiadają obie wspomniane wartości na poziomie 0. KIerując się tymi obserwacjami, możemy dostrzec, że w przypadku 6 tys wierszy, które mają nasłonecznienie na poziomie 0 oraz energie większą niż 0 mogła nastąpić awaria czujnika nasłonecznienia, natomiast w przypadku wierszy, które mają nasłonecznienie większe od 0, awarię urządzenia dokonującego pomiaru wyprodukowanej energii.

Ciśnienie

Ze względu na to, że w zbiorze występują dla cisnienia (pressure) tylko wartości zerowe albo większe niż 0.7, uznano, że zerowe wartości są wynikiem awarii czujników i zastąpiono je średnią niezerowych wartości ciśnienia dla określonej lokalizacji. Jeśli wystąpiłaby sytuacja, że dla danej lokalizacji nie byłoby żadnego pomiaru ciśnienia to wartości zerowe zastępowane sa średnią ciśnienia dla wszystkich lokalizacji.

empty_values <- needed_data %>% filter(pressure == 0)
not_empty_values <- needed_data %>% filter(pressure > 0)
for(idplace in idplaces) {
  empty_pressure <- empty_values %>% filter(place == idplace)
  pressure_column <- not_empty_values %>% filter(place == idplace) %>% select(pressure)
  average_value <- mean(pressure_column$pressure)
  if(is.na(average_value)) {
    pressure_column <- not_empty_values %>% select(pressure)
    average_value <- mean(pressure_column$pressure)
  }
  for(i in 1:nrow(empty_pressure)) {
    row <- empty_pressure[i, ]
      needed_data$pressure[which(needed_data$measurementId == row$measurementId)] <- average_value
  }
}

Nasłonecznienie

Założono, że w nocy nasłonecznienie wynosi 0, stąd zastapiono tylko wartości zerowe dla nasłonecznienia (radiation) oraz wyprodukowaną energią większą niż 0 z przediału godzinnego <6;18>. Wartości zerowe zastąpiono średnią wartościa parametru dla danej lokalizacji w danym miesiącu o danej godzinie.

empty_values <- needed_data %>% filter(radiation == 0 & only_hour > 5 & only_hour  < 19 & energy > 0)
not_empty_values <- needed_data %>% filter(radiation > 0 & only_hour > 5 & only_hour  < 19)
for(idplace in idplaces) {
  empty_radiation <- empty_values %>% filter(place == idplace)
  if(nrow(empty_radiation) > 0) {
    for(i in 1:nrow(empty_radiation)) {
      row <- empty_radiation[i, ]
      cloudcover_low <- row$cloudcover - 0.1
      cloudcover_up <- row$cloudcover + 0.1
      radiation_column <- not_empty_values %>% filter(place == idplace & only_hour == row$only_hour & only_month == row$only_month & cloudcover > cloudcover_low & cloudcover < cloudcover_up) %>% select(radiation)
      if(nrow(radiation_column) > 0) {
        average_value <- mean(radiation_column$radiation)
          if(!is.na(average_value)) {
              needed_data$radiation[which(needed_data$measurementId == row$measurementId)] <- average_value
          }
      }
    }
  }
}

Podstawowe statystyki

## [1] "Rozmiar zbioru:  235790"
Średnia Wartość minimalna Wartość maksymalna Odchylenie standardowe Liczba zerowych wartości 1. kwartyl 2. kwartyl 3. kwartyl
age 0.3144706 0.000 1.000 0.3779699 69350 0.0000000 0.1250000 0.719000
temperature 0.3734429 0.045 0.818 0.1722182 0 0.2120000 0.3480000 0.530000
radiation 0.1110318 0.000 0.710 0.1344122 74523 0.0000000 0.0390000 0.208000
pressure 0.7529589 0.730 0.769 0.0044807 0 0.7510000 0.7530000 0.755000
windspeed 0.0762241 0.000 0.696 0.0501477 1070 0.0420000 0.0660000 0.102000
humidity 0.6843925 0.160 1.000 0.1817457 0 0.5400000 0.7000000 0.840000
dewpoint 0.6055304 0.139 0.865 0.0956441 0 0.5350000 0.6190000 0.683000
bearing 0.4512351 0.000 0.769 0.2303888 2520 0.3000000 0.4780000 0.660000
cloudcover 0.3590429 0.000 1.000 0.2595479 38394 0.2300000 0.3100000 0.510000
temp_param 0.1224742 0.009 0.983 0.0631091 0 0.0730000 0.1110000 0.126000
radiation_param 0.2220020 0.108 1.000 0.0115436 0 0.2160000 0.2200000 0.222000
pressure_param 0.0002370 0.000 1.000 0.0039993 233263 0.0000000 0.0000000 0.000000
wind_param 0.0385247 0.000 1.000 0.0048811 2 0.0370000 0.0380000 0.039000
humidity_param 0.0638395 0.034 0.579 0.0420096 0 0.0440000 0.0440000 0.062000
dewpoint_param 0.1193809 0.063 0.415 0.0133907 0 0.1140000 0.1140000 0.118000
bearing_param 0.3454981 0.000 1.000 0.0340350 1 0.3360000 0.3360000 0.339000
cloud_param 0.2061627 0.000 1.000 0.0300724 1 0.1960000 0.1960000 0.198000
distance 0.4686464 0.000 1.000 0.2967915 570 0.1912568 0.4590164 0.726776
altitude 0.5463627 0.111 0.884 0.1806407 0 0.4190000 0.5640000 0.681000
azimuth 0.4545834 0.128 0.818 0.1965414 0 0.2950000 0.4250000 0.635000
altitude_param 0.2055096 0.000 0.982 0.1494217 1 0.0960000 0.1360000 0.266000
azimuth_param 0.3652845 0.000 1.000 0.1822820 1 0.2090000 0.2880000 0.482000
pcnm1 0.4223529 0.000 1.000 0.2043798 13870 0.3770000 0.3780000 0.380000
pcnm2 0.3537647 0.000 0.972 0.2142737 13870 0.2500000 0.3770000 0.422000
pcnm3 0.6044706 0.000 1.000 0.2170462 13870 0.5510000 0.6050000 0.730000
pcnm4 0.5189412 0.000 1.000 0.2555701 13870 0.3630000 0.5310000 0.634000
pcnm5 0.4164706 0.000 1.000 0.2502325 13870 0.3310000 0.4270000 0.462000
pcnm6 0.4940588 0.000 1.000 0.2392556 13870 0.3390000 0.4930000 0.493000
pcnm7 0.1141765 0.000 1.000 0.2249332 13870 0.0310000 0.0520000 0.114000
pcnm8 0.4033529 0.000 1.000 0.2636083 13870 0.2040000 0.4120000 0.511000
pcnm9 0.5371176 0.000 1.000 0.2616246 13870 0.5270000 0.5320000 0.600000
pcnm10 0.6276471 0.000 1.000 0.2123752 13870 0.5530000 0.6190000 0.717000
pcnm11 0.3236471 0.000 1.000 0.2066428 13870 0.2570000 0.3270000 0.327000
pcnm12 0.7567647 0.000 1.000 0.2289319 13870 0.7480000 0.7600000 0.884000
pcnm13 0.6500588 0.137 1.000 0.1995126 0 0.6140000 0.6140000 0.738000
pcnm14 0.4892941 0.000 1.000 0.1838311 13870 0.4320000 0.4730000 0.530000
pcnm15 0.5709412 0.000 1.000 0.2046190 13870 0.6120000 0.6140000 0.615000
mode 0.1767311 0.000 1.000 0.2210455 94008 0.0000000 0.0560000 0.325000
mode_param 0.1967021 -0.025 1.006 0.0534842 2 0.1580000 0.1940000 0.213000
energy 0.1687714 0.000 1.000 0.2106090 78521 0.0000000 0.0490000 0.332000
Wartość minimalna Wartość maksymalna Liczba unikalnych wartości
place 0.000 0.425 17
brand 0.000 0.417 6
latitude 0.415 0.553 9
longitude 0.154 0.691 12
day 0.000 1.000 365
hour 0.000 1.000 19
measurementId 1.000 276488.000 235790
model 0.000 0.750 11
year 2012.000 2013.000 2

Korelacja

Macierz korelacji wszystkich parametrów

Wykresy

Zmiana wytwarzanej energii w czasie